package org.shj.thread.book2.chapter02;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * immutable 模式： 类的成员变量只有在实例化类的时候才能被赋值，没有其它途径可更改
 * 类的成员变量的值。或者是被 final 修饰了，只能赋值一次。这样的类是不可变的，是线程安全的。
 *
 * @author Shen Huang Jian
 * @date 2019-08-26 12:00
 */
public class Main {

    public static void main(String[] args){
        /*
         * 仅演示两种同步的 list 添加元素时的性能。
         */
        List<String> list = Collections.synchronizedList(new ArrayList<>());

        int times = 10000;
        long begin = System.currentTimeMillis();
        for(int i = 0; i < times; i++){
            list.add(i + "");
        }
        long end = System.currentTimeMillis();
        System.out.println("took(ms): " + (end-begin));

        List<String> list2 = new CopyOnWriteArrayList<>();
        begin = System.currentTimeMillis();
        for(int i = 0; i < times; i++){
            list2.add(i + "");
        }
        end = System.currentTimeMillis();
        System.out.println("took(ms): " + (end-begin));

    }
}
